Apache Commons Collections একটি শক্তিশালী লাইব্রেরি যা Java Collections Framework এর উপর ভিত্তি করে অতিরিক্ত কার্যকারিতা এবং ডাটা স্ট্রাকচার সরবরাহ করে। এর মধ্যে Synchronized Collections এবং Unmodifiable Collections তৈরি করার জন্য বিভিন্ন সুবিধাজনক ইউটিলিটি ক্লাস রয়েছে, যা আপনাকে থ্রেড সেফ কালেকশন তৈরি এবং কালেকশন পরিবর্তন প্রতিরোধ করতে সাহায্য করে।
Synchronized Collections
Synchronized Collections এমন কালেকশন, যা Thread-safe হয়, অর্থাৎ একাধিক থ্রেড একই কালেকশনে একই সময়ে ডেটা অ্যাক্সেস বা পরিবর্তন করতে পারে না। এতে আপনি সহজেই নিশ্চিত করতে পারেন যে, কালেকশন এর উপর কোনো একসাথে একাধিক থ্রেড কাজ করলে ডেটার কোন ধরনের ক্ষতি বা অসামঞ্জস্য হবে না।
Synchronized Collections তৈরি করা:
Synchronized Collections তৈরি করতে Collections.synchronizedXXX() পদ্ধতি ব্যবহার করা হয়। তবে, Apache Commons Collections এ এই ধরনের বিশেষ Synchronized Collections এর জন্যও ইউটিলিটি ক্লাস প্রদান করা হয়েছে।
Apache Commons Collections তে SynchronizedCollection, SynchronizedList, SynchronizedSet, SynchronizedMap ইত্যাদি ক্লাস ব্যবহার করে সিঙ্ক্রোনাইজড কালেকশন তৈরি করা যায়।
Synchronized Collection Example:
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.list.SynchronizedList;
import java.util.ArrayList;
import java.util.List;
public class SynchronizedCollectionExample {
public static void main(String[] args) {
// Create a normal list
List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("cherry");
// Make the list synchronized
List<String> synchronizedList = CollectionUtils.synchronizedList(list);
// Access the synchronized list in a thread-safe manner
synchronized(synchronizedList) {
synchronizedList.forEach(System.out::println);
}
}
}
এখানে:
CollectionUtils.synchronizedList()ব্যবহার করে ArrayList কে Thread-safe সিঙ্ক্রোনাইজড লিস্টে রূপান্তরিত করা হয়েছে।
Synchronized Set Example:
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.set.SynchronizedSet;
import java.util.HashSet;
import java.util.Set;
public class SynchronizedSetExample {
public static void main(String[] args) {
// Create a normal set
Set<String> set = new HashSet<>();
set.add("apple");
set.add("banana");
set.add("cherry");
// Make the set synchronized
Set<String> synchronizedSet = CollectionUtils.synchronizedSet(set);
// Access the synchronized set in a thread-safe manner
synchronized(synchronizedSet) {
synchronizedSet.forEach(System.out::println);
}
}
}
এখানে:
CollectionUtils.synchronizedSet()ব্যবহার করে HashSet কে Thread-safe সিঙ্ক্রোনাইজড সেটে রূপান্তরিত করা হয়েছে।
Unmodifiable Collections
Unmodifiable Collections এমন কালেকশন যেগুলোর উপাদান পরিবর্তন করা সম্ভব নয়। একবার যদি একটি কালেকশন unmodifiable হয়ে যায়, তাহলে আপনি সেই কালেকশনে নতুন আইটেম অ্যাড বা রিমুভ করতে পারবেন না, শুধুমাত্র পড়া (read) সম্ভব হবে। এই ধরনের কালেকশন নিরাপত্তা নিশ্চিত করতে সাহায্য করে, যেমন: আপনার ডেটা যাতে অপ্রত্যাশিতভাবে পরিবর্তিত না হয়।
Unmodifiable Collections তৈরি করা:
Unmodifiable Collections তৈরি করতে Collections.unmodifiableXXX() পদ্ধতি ব্যবহার করা হয়। তবে, Apache Commons Collections লাইব্রেরি UnmodifiableCollection, UnmodifiableList, UnmodifiableSet, UnmodifiableMap ইত্যাদি ক্লাসও প্রদান করে।
Unmodifiable List Example:
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.list.UnmodifiableList;
import java.util.ArrayList;
import java.util.List;
public class UnmodifiableListExample {
public static void main(String[] args) {
// Create a normal list
List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("cherry");
// Make the list unmodifiable
List<String> unmodifiableList = CollectionUtils.unmodifiableList(list);
// Try to modify the list (will throw UnsupportedOperationException)
// unmodifiableList.add("date"); // Uncommenting this line will throw an exception
// Print the list
unmodifiableList.forEach(System.out::println);
}
}
এখানে:
CollectionUtils.unmodifiableList()ব্যবহার করে একটি ArrayList কে Unmodifiable লিস্টে রূপান্তরিত করা হয়েছে।- এখানে
unmodifiableList.add("date")লাইনটি কমেন্ট করলে চলবে, তবে এটি অ্যাড করার চেষ্টা করলেUnsupportedOperationExceptionফেলে।
Unmodifiable Set Example:
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.set.UnmodifiableSet;
import java.util.HashSet;
import java.util.Set;
public class UnmodifiableSetExample {
public static void main(String[] args) {
// Create a normal set
Set<String> set = new HashSet<>();
set.add("apple");
set.add("banana");
set.add("cherry");
// Make the set unmodifiable
Set<String> unmodifiableSet = CollectionUtils.unmodifiableSet(set);
// Try to modify the set (will throw UnsupportedOperationException)
// unmodifiableSet.add("date"); // Uncommenting this line will throw an exception
// Print the set
unmodifiableSet.forEach(System.out::println);
}
}
এখানে:
CollectionUtils.unmodifiableSet()ব্যবহার করে HashSet কে Unmodifiable সেটে রূপান্তরিত করা হয়েছে।
Synchronized vs Unmodifiable Collections
| Feature | Synchronized Collection | Unmodifiable Collection |
|---|---|---|
| Purpose | Thread-safety and concurrency | Prevent modification (immutability) |
| Modification | Allowed, but thread-safe | Not allowed (no modification) |
| Use Case | Used when multiple threads access and modify collections | Used to protect data from unintended modifications |
| Performance | Slightly slower due to synchronization | More performant as no locks or synchronization are needed |
| Implementation | Synchronized using locking mechanisms | Wraps the collection to prevent modification |
সারাংশ
Synchronized Collections এবং Unmodifiable Collections দুটি গুরুত্বপূর্ণ বৈশিষ্ট্য, যা Apache Commons Collections লাইব্রেরি প্রদান করে। Synchronized Collections থ্রেড সেফ কালেকশন তৈরি করে, যেখানে একাধিক থ্রেড একই সময় কালেকশনে ডেটা অ্যাক্সেস বা পরিবর্তন করতে পারে না। অন্যদিকে, Unmodifiable Collections নিশ্চিত করে যে একবার তৈরি হওয়া কালেকশন পরিবর্তন করা যাবে না, যা ডেটা নিরাপত্তা এবং স্থিরতা বজায় রাখে। উভয় ধরনের কালেকশন আপনাকে নিরাপদ এবং কার্যকরী ডাটা ম্যানেজমেন্ট নিশ্চিত করতে সাহায্য করে, বিশেষ করে মাল্টি-থ্রেডেড পরিবেশে বা ডেটার স্থিরতা বজায় রাখতে।